package br.com.dallasmotopecas.venda.lembrar.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.agenda.controller.AgendaLembrarController;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaLembrarVo;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="agendaLembrarManagerBean")
@ViewScoped
public class AgendaLembrarManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private AgendaLembrarVo agendaLembrarVo = null;
	private List<AgendaLembrarVo> listaAgendaLembrar;
	
	public AgendaLembrarManagerBean()
	{
		
	}
	
	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			iniciarAgendaLembrar();
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		getListaAgendaLembrar().clear();
		setListaAgendaLembrar(null);
		setAgendaLembrarVo(null);
	}
	
	public AgendaLembrarVo getAgendaLembrarVo()
	{
		if (agendaLembrarVo == null) agendaLembrarVo = new AgendaLembrarVo();
		
		return agendaLembrarVo;
	}

	public void setAgendaLembrarVo(AgendaLembrarVo agendaLembrarVo)
	{
		this.agendaLembrarVo = agendaLembrarVo;
	}

	public List<AgendaLembrarVo> getListaAgendaLembrar()
	{
		if (listaAgendaLembrar == null) listaAgendaLembrar = new ArrayList<AgendaLembrarVo>();
		
		return listaAgendaLembrar;
	}

	public void setListaAgendaLembrar(List<AgendaLembrarVo> listaAgendaLembrar)
	{
		this.listaAgendaLembrar = listaAgendaLembrar;
	}

	private void iniciarAgendaLembrar()
	{
		AgendaLembrarController agendaLembrarController = null;
		try
		{
			agendaLembrarController = new AgendaLembrarController(getContexto());
			agendaLembrarController.carregarListaAgendaLembrar(getListaAgendaLembrar());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (agendaLembrarController != null)
			{
				agendaLembrarController.close();
				agendaLembrarController = null;
			}
		}
	}
	
	public void iniciarInserir()
	{
		setAgendaLembrarVo(new AgendaLembrarVo());
		abrirModal("agendaLembrarDialog");
	}
	
	public void iniciarAlterar(AgendaLembrarVo agendaLembrarVo)
	{
		setAgendaLembrarVo(agendaLembrarVo);
		abrirModal("agendaLembrarDialog");
	}
	
	public void gravar()
	{
		AgendaLembrarController agendaLembrarController = null;
		try
		{
			agendaLembrarController = new AgendaLembrarController(getContexto());
			
			if (getAgendaLembrarVo().getId() == 0)
				agendaLembrarController.inserirAgendaLembrar(getAgendaLembrarVo());
			else
				agendaLembrarController.alterarAgendaLembrar(getAgendaLembrarVo());
			
			iniciarAgendaLembrar();
			fecharModal("agendaLembrarDialog");
			
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{	
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (agendaLembrarController != null)
			{
				agendaLembrarController.close();
				agendaLembrarController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/venda/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{	
			e.printStackTrace();
		}
	}
}
